package com.egl.web;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

import javax.servlet.ServletContext;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;

public class TomcatWebServer implements WebServer {

	private static final Logger LOG = Logger.getLogger(WebServer.class);

	private ServletContext servletContext = null;

	private String contextPath = null;

	public void setServletContext(ServletContext servletContext) {
		this.servletContext = servletContext;
		init();
	}

	public String getContextPath() {
		return contextPath;
	}

	private void init() {

		Class<?> clz = null;

		Field f = null;
		Method m = null;

		Object obj = null;

		try {

			// context.context
			clz = servletContext.getClass();
			f = clz.getDeclaredField("context");
			f.setAccessible(true);
			obj = f.get(servletContext);

			// context.context.context
			if (obj != null) {
				clz = obj.getClass();
				f = clz.getDeclaredField("context");
				f.setAccessible(true);
				obj = f.get(obj);
			}

			// context.context.context.getName()
			if (obj != null) {

				// context.context.context.getName()
				clz = obj.getClass();

				m = clz.getMethod("getName");
				m.setAccessible(true);
				obj = m.invoke(obj);

			}
			if (obj instanceof String) {
				contextPath = (String) obj;
			}

		} catch (Exception e) {
			LOG.error(null, e);
		}

		// default
		if (StringUtils.isBlank(contextPath)) {
			contextPath = "";
		}

	}

}